#ifndef GY_DELEGATETABLEVIEW_H
#define GY_DELEGATETABLEVIEW_H

#include <QDebug>
#include <QObject>
#include <QHeaderView>
#include <QAbstractItemDelegate>

#include "GY_IdTableView.h"
#include "Delegate/GY_TableViewItemDelegate.h"

class GY_CONTROLLIBRARY_EXPORT GY_DelegateTableView : public GY_IdTableView
{
    Q_OBJECT

signals:
    ///
    /// \brief dataChangedSig 单元格储存数据发生改变
    /// \param data 数据结构体
    /// \param row 行
    /// \param column 列
    ///
    void dataChangedSig(QVariant data,const QVariant& rowId,int column) const;
    ///
    /// \brief sendClickedBlackSig 空白发送信号
    /// \param model 数据模型
    ///
    void sendClickedBlackSig(QStandardItemModel *model);

public:
    explicit GY_DelegateTableView(QWidget *parent = nullptr);
    ~GY_DelegateTableView();
    /**
    * @brief addRowData 添加行
    * @param rowId 添加的行Id
    * @param rowData 添加的行数据
    * @return返回是否添加成功
    */
    bool addRowData(const QVariant& rowId, const QVector<QVariant> &rowData) override;

    void clickBlack() {
        emit sendClickedBlackSig((QStandardItemModel*)this->model());
    }

    //返回行数
    int rowCount() {
        return ((QStandardItemModel*)this->model())->rowCount();
    }

    //返回列数
    int columnCount() {
        return ((QStandardItemModel*)this->model())->columnCount();
    }

    template<class T>
    ///
    /// \brief registerDelegate 注册代理控件
    /// \param delegateType 标识符
    /// \return 是否注册成功
    ///
    bool registerDelegate(QVariant delegateType)
    {
        return m_pDelegate->registerDelegate<T>(delegateType);
    }

    ///
    /// \brief setDelegate 设置哪个item的标识符（标明代理控件）
    /// \param row 行
    /// \param column 列
    /// \param delegateType 标识符
    /// \return 是否设置成功
    ///
    bool setDelegate(const QVariant& rowId,int column,QVariant delegateType) {
        return m_pDelegate->setDelegate(rowId,column,delegateType);
    }

protected:
    void mousePressEvent(QMouseEvent *event) override;

private:
    GY_TableViewItemDelegate *m_pDelegate = nullptr;

};

#endif // GY_DELEGATETABLEVIEW_H
